#include <iostream>
#include <string>
#include <regex>


int main()
{
    //http请求行格式：GET /login?username=mzx&password=123123 HTTP/1.1\r\n
    std::string request = "GET /login?username=mzx&password=123123 HTTP/1.1\r\n";
    /*
    正则匹配时首先匹配整个字符串 然后将括号内匹配的内容全部捕捉到matches中(?: 修饰的除外)
    ?:表示匹配但不捕捉  ?表示前面括号内的内容在原始字符串中出现则匹配 否则不匹配 如果没有匹配 会添加一个换行到matches中
    */
    std::regex reg("(GET|POST|HEAD|PUT|DELETE) ([^?]*)(?:\\?(.*))? (HTTP/1\\.[01])(?:\n|\r\n)");
    std::smatch matches;
    if (!std::regex_match(request, matches, reg))
        return -1;
    for (auto& s : matches)
        std::cout << s << std::endl;

    return 0;
}
